'use strict';
/*
aim:根据输入的(number_a,number_b)生成字母数组
require:#1 1 --> 'a',2 --> 'b'... 26 --> 'z' ... 27 --> aa,28 --> ab... 
        #2 if(number_a>number_b)-->倒序(字母对应的数字 大到小) ； else if(number_a < number_b)正序;
           else 只含一个元素为 number_a对应的字母 的数组 
function:#1 数字 转换为 字母 的方法 --> numToChar()
         #2 (o1,o2)生成 字母数组 的方法 --> createArr()

detail:#1 String.fromCharCode(1 + 96) = 'a';      

*/
  //数字 转换为 字母 的方法
  function numToChar(num){
    let remainder = num%26;
    //假设quotient < 27,则最大数字为703 其对应字母为'zz'
    let quotient = parseInt(num/26);

    //当商取整为 0 时，说明该num<27,对应的是单个字母
    if(quotient === 0){
      return String.fromCharCode(remainder + 96);
    }
    //当商取整为 1 时，余为 0 时；说明num = 26,对应'z'
    else if(quotient === 1 && remainder === 0){
      return 'z';
    }
    //当商取整 大于1 时，余为 0 时；
	//第一个字母为 String.fromCharCode(qutient - 1 + 96)
    //说明该数字对应两个字母，且第二个字母为'z'。
    else if(quotient > 1 && remainder === 0){
      return numToChar(quotient - 1) + 'z';
    }
    //当商取整 大于1，且余不为0时；说明该数字 第一个字母 String.fromCharCode(qutient + 96);
    //第二个字母为String.fromCharCode(remainder + 96)
    else{
      return numToChar(quotient) + String.fromCharCode(remainder + 96);
    }
  } 


  //(o1,o2)生成 字母数组 的方法
  function createArr(o1,o2){
    let arr = [];
    if(o1 <o2){
      for(let i = o1;i <= o2;i++){
        arr.push(numToChar(i));
      }
    }else if(o1 >o2){
      for(let i = o1;i >= o2;i--){
        arr.push( numToChar(i));
      }
    }
    return arr;
  }


  //（number_a,number_b）生成 字母数组 的方法
  function get_letter_interval_2(number_a,number_b){
    if(number_a === number_b){
      return [numToChar(number_a)];
    }else{
      return createArr(number_a,number_b);
    }
  }

//let d = get_letter_interval_2(53,20);
//console.log(d);


module.exports = get_letter_interval_2;
